package com.mystudy.concurrent.designModel.observerModel;

import java.util.ArrayList;
import java.util.List;

/**
 * TODO: 主题
 *
 * @author acy
 * @since 2019/05/27 20:43
 */
public class Subject {
	//监听者集合
	private List<Observer> observers;

	//状态
	private int state;


	/**
	 * 添加监听者
	 *
	 * @param observer 监听者
	 */
	public void addObserver(Observer observer) {
		observers.add(observer);
	}

	public List<Observer> getObservers() {
		return observers;
	}

	public void setObservers(List<Observer> observers) {
		this.observers = observers;
	}

	public int getState() {
		return state;
	}

	/**
	 * 这只状态，状态变化的时候通知所有的监听者
	 *
	 * @param state
	 */
	public void setState(int state) {
		if (state == this.state) {
			return;
		}
		this.state = state;
		notifyAllObserver();
	}

	/**
	 * 通知所有的监听者
	 */
	private void notifyAllObserver() {
		observers.forEach(Observer::doUpdate);
	}

	public Subject() {
		observers = new ArrayList<>();
	}

}
